#include "bsp_led.h"
#include "FreeRTOS.h"
#include "cmsis_os2.h"
#include "portmacro.h"
#include <stdint.h>

Led led;
/**
 * @description: Working Status Leds
 * @param {void} *argument
 * @return {*}
 * @Date: 2024-02-02 09:49:22
 * @LastEditors: Even
 */
void Led::LedHandler(void *argument) {

  while (1) {
    // TickType_t previous_wake_time = osKernelGetTickCount();
    LedToggle(LEDR);
    // osDelayUntil(previous_wake_time + 200);
    osDelay(250);
  }
}

void Led::LedToggle(Led_enum_t d) {
  if (d == LEDR) {
    HAL_GPIO_TogglePin(LEDR_GPIO_Port, LEDR_Pin);
  } else if (d == LEDG) {
    HAL_GPIO_TogglePin(LEDG_GPIO_Port, LEDG_Pin);
  } else {
    HAL_GPIO_TogglePin(LEDR_GPIO_Port, LEDR_Pin);
    HAL_GPIO_TogglePin(LEDG_GPIO_Port, LEDG_Pin);
  }
}

void Led::LedOn(Led_enum_t d) {
  if (d == LEDR) {
    HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_RESET);
  } else if (d == LEDG) {
    HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, GPIO_PIN_RESET);
  } else {
    HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, GPIO_PIN_RESET);
  }
}

void Led::LedOff(Led_enum_t d) {
  if (d == LEDR) {
    HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_SET);
  } else if (d == LEDG) {
    HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, GPIO_PIN_SET);
  } else {
    HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LEDG_GPIO_Port, LEDG_Pin, GPIO_PIN_SET);
  }
}